/** @file
  Macro and type definitions for QEMU's Red Hat vendor-specific PCI
  capabilities that provide various hints about PCI Bridges.

  Refer to "docs/pcie_pci_bridge.txt" in the QEMU source directory.

  Copyright (C) 2017, Red Hat, Inc.

  This program and the accompanying materials are licensed and made available
  under the terms and conditions of the BSD License which accompanies this
  distribution. The full text of the license may be found at
  http://opensource.org/licenses/bsd-license.php

  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
  WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/

#ifndef __QEMU_PCI_BRIDGE_CAPABILITIES_H__
#define __QEMU_PCI_BRIDGE_CAPABILITIES_H__

#include <IndustryStandard/Pci23.h>

//
// The hints apply to PCI Bridges whose PCI_DEVICE_INDEPENDENT_REGION.VendorId
// equals the following value.
//
#define QEMU_PCI_BRIDGE_VENDOR_ID_REDHAT 0x1B36

//
// Common capability header for all hints.
//
#pragma pack (1)
typedef struct {
  EFI_PCI_CAPABILITY_VENDOR_HDR VendorHdr;
  UINT8                         Type;
} QEMU_PCI_BRIDGE_CAPABILITY_HDR;
#pragma pack ()

//
// Values defined for QEMU_PCI_BRIDGE_CAPABILITY_HDR.Type.
//
#define QEMU_PCI_BRIDGE_CAPABILITY_TYPE_RESOURCE_RESERVATION 0x01

//
// PCI Resource Reservation structure for when
// QEMU_PCI_BRIDGE_CAPABILITY_HDR.Type equals
// QEMU_PCI_BRIDGE_CAPABILITY_TYPE_RESOURCE_RESERVATION.
//
#pragma pack (1)
typedef struct {
  QEMU_PCI_BRIDGE_CAPABILITY_HDR BridgeHdr;
  UINT32                         BusNumbers;
  UINT64                         Io;
  UINT32                         NonPrefetchable32BitMmio;
  UINT32                         Prefetchable32BitMmio;
  UINT64                         Prefetchable64BitMmio;
} QEMU_PCI_BRIDGE_CAPABILITY_RESOURCE_RESERVATION;
#pragma pack ()

#endif
